Amazon LinuxでDRBDが起動しない場合の復旧方法
ディスクが壊れている?
起動中のDRBDのステータスを見ていたらDisklessという表示に出くわしました。今までは両方ともUpToDateだったのにいつの間に変わってしまったのでしょうか。
$ sudo service drbd status drbd driver loaded OK; device status: version: 8.3.11 (api:88/proto:86-96) srcversion: 2D876214BAAD53B31ADC1D6 m:res cs ro ds p mounted fstype 0:drbd_res0 Connected Primary/Secondary Diskless/UpToDate C /data xfs
メタディスクの作り直し
もとに戻すためにまずは障害があるサーバーをセカンダリに降格させます。Heartbeatを使っていればすぐですね。
$ sudo service heartbeat stop Stopping High-Availability services: Done.
ループバックデバイスを作り直してメタディスクを作成します。これでセカンダリの中身が空になっています。
$ sudo dd if=/dev/zero of=/var/drbd-meta bs=1M count=128 128+0 records in 128+0 records out 134217728 bytes (134 MB) copied, 4.01294 s, 33.4 MB/s $ sudo losetup /dev/loop0 /var/drbd-meta $ sudo drbdadm create-md drbd_res0 Writing meta data... initializing activity log NOT initialized bitmap New drbd meta data block successfully created. success
DRBDの再起動
再起動をしてステータスを更新します。
$ sudo service drbd stop Stopping all DRBD resources: . $ sudo service drbd start --== Thank you for participating in the global usage survey ==-- The server's response is: node already registered Starting DRBD resources: [ d(drbd_res0) s(drbd_res0) n(drbd_res0) ]. $ sudo service drbd status drbd driver loaded OK; device status: version: 8.3.11 (api:88/proto:86-96) srcversion: 2D876214BAAD53B31ADC1D6 m:res cs ro ds p mounted fstype 0:drbd_res0 SyncTarget Secondary/Primary Inconsistent/UpToDate C ... sync'ed: 3.5% (4948/5120)Mfinish: 0:06:50 12,312 (12,312) want: 51,200 K/sec $ sudo service drbd status drbd driver loaded OK; device status: version: 8.3.11 (api:88/proto:86-96) srcversion: 2D876214BAAD53B31ADC1D6 m:res cs ro ds p mounted fstype 0:drbd_res0 SyncTarget Secondary/Primary Inconsistent/UpToDate C ... sync'ed: 76.9% (1188/5120)Mfinish: 0:02:17 8,856 (8,744) want: 51,200 K/sec $ sudo service drbd status drbd driver loaded OK; device status: version: 8.3.11 (api:88/proto:86-96) srcversion: 2D876214BAAD53B31ADC1D6 m:res cs ro ds p mounted fstype 0:drbd_res0 Connected Secondary/Primary UpToDate/UpToDate C
Inconsistentを経て、プライマリとセカンダリが共にUpToDateになりましたね。データが同期されたと思います!
まとめ
以前、Heartbeatによって障害が発生した際にマスターからスレーブに切り替える方法を学びましたが、今回は、障害が発生したディスクを復旧させる方法について学びました。EC2の場合、障害が起きたらインスタンスごとターミネートしてAMIから新規にインスタンスを立ち上げるという方法もありますが、サーバー自体が動いているのであればディスクの作り直しのみで済みますので簡単ですね。今日から君もサーバー運用担当者!?